package com.shujia.wyh.day01;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/*
        注册驱动的第二种方式：
            正常情况下，我们在使用jdbc去连接数据的时候，在第一种的方式下，我们借助jdk自己提供的一个DriverManager类来注册驱动
            实际上底层用的时候驱动包中的驱动类对应class文件。所以总的来说，底层是通过反射的方式来使用的。
            我们上一个案例中注册驱动的前提是创建一个mysql驱动包中的Driver对象。
            但是呢，将来我们不一定只用java连接mysql，还有可能连接hbase,hadoop,hive都是有可能的。
            按照第一种方式实现的话，每次加载驱动之前都需要去看看对应驱动包中的类路径，感觉很麻烦，能不能使用传入字符串的方式来引入驱动包中的类呢？

        回顾一下，获取一个class文件的Class对象的方式：
            1、getClass 第一种方式pass  原因是我自己根本创建不了对象
            2、.class   这种也pass,我们没法单独获取到类
            3、Class.forName() 使用第三种方式
 */
public class JDBCTest2 {

    private static Statement stat;
    private static Connection conn;

    public static void main(String[] args) {

        //1、加载驱动
        //传入的是驱动包中类的路径
        //我们这里是用mysql，所以传入的是Driver类的路劲
        try {
            Class.forName("com.mysql.jdbc.Driver");

            //2、创建与数据库之间的连接对象
            String url = "jdbc:mysql://192.168.254.110:3306/bigdata21?useUnicode=true&characterEncoding=UTF8&useSSL=false";
            String user = "root";
            String password = "123456";
            conn = DriverManager.getConnection(url, user, password);

            //3、获取操作数据库的对象
            stat = conn.createStatement();

            //编写sql交给操作对象进行执行
            //增
//            String sql = "insert into dept(deptno,dname,loc) values(90,'数加','安徽合肥')";
//            int i = stat.executeUpdate(sql);
//            System.out.println(i == 1 ? "数据添加完毕！！" : "数据添加失败！！");

            //删
            String sql2 = "delete from dept where deptno=90";
            int i2 = stat.executeUpdate(sql2);
            System.out.println(i2 == 1 ? "数据删除完毕！！" : "数据删除失败！！");

            //改
            String sql3 = "update dept set loc='安徽合肥' where deptno=80";
            int i3 = stat.executeUpdate(sql3);
            System.out.println(i3 == 1 ? "数据修改完毕！！" : "数据修改失败！！");

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (stat != null) {
                try {
                    stat.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

            if(conn!=null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}
